package main

import "fmt"

/*
结构体方法可以是普通的值类型接收者func (p Person) SetAge1(age int)，
	也可以是指针类型接收者func (p *Person) SetAge2(age int)

区别就是，值类型的方法如果对于p内部属性修改，系统会拷贝一份数据，不会影响原有的person属性
	指针类型方法如果修改p内部属性，就会影响原有的person属性

*/

type Person2 struct {
	name string
	age  int
}

//值类型接收者方法
func (p Person2) SetAge1(newAge int) {
	p.age = newAge
}

//指针类型接收者方法
func (p *Person2) SetAge2(newAge int) {
	p.age = newAge
}

func main() {
	person := Person2{"sdclone", 30}

	//调用值类型方法
	person.SetAge1(24)
	//此时person的年龄没有改变，依然是30
	fmt.Println("person此时的年龄是: ", person.age) //30

	//调用指针类型方法
	person.SetAge2(27)
	//此时person年龄变成了27
	fmt.Println("person此时的年龄是: ", person.age) //27
}
